package ch3;

/**
 * 使用synchronized修饰实例方法，排除对sequence变量访问操作的交错的可能性
 * 此外，锁对可见性的保障使得nextSequence()的当前执行线程对sequence变量的更新对该方法的下一个执行线程可见
 */

public class SafeCircularSeqGenerator implements CircularSeqGenerator{
    private short sequence = -1;
    public synchronized short nextSequence() {
        if (sequence >= 999) {
            sequence = 0;
        } else {
            sequence++;
        }
        return sequence;
    }

    // 上面的同步实例方法相当于 以this为引导锁的同步块
//    public short nextSequence() {
//        synchronized (this) {
//            if (sequence >= 999) {
//                sequence = 0;
//            } else {
//                sequence++;
//            }
//            return sequence;
//        }
//    }
}
